# 拉取一个带有golang环境的镜像来编译go项目（比较小的镜像）
FROM crpi-cb1t6ui6q7epw7vo.cn-chengdu.personal.cr.aliyuncs.com/worklz/golang:alpine AS builder
# 作者
MAINTAINER worklz

# 构建可执行文件
# 关闭CGO
ENV CGO_ENABLED 0
# 设置代理
ENV GOPROXY https://goproxy.cn,direct
# 设置镜像源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

# 设置工作目录
WORKDIR /build

# 先复制依赖文件（利用 Docker 缓存，避免每次代码变动都重新下载依赖）
COPY go.mod go.sum ./
# 下载依赖（关键步骤：确保所有依赖提前拉取）
RUN go mod download

# 复制源代码到build目录下
COPY . . 

# 编译并输出详细日志（-v 显示编译过程，-o 指定输出文件，若入口在子目录需修改路径，如 ./cmd/server）
RUN go build -v -o main

# 构建运行时镜像（极小镜像）
FROM crpi-cb1t6ui6q7epw7vo.cn-chengdu.personal.cr.aliyuncs.com/worklz/alpine
WORKDIR /app

# 配置时区（东八区）
RUN apk add --no-cache tzdata && \
    ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone

# 复制编译产物和必要目录
# pkg里有初始化的sql文件和一些静态文件
COPY --from=builder /build/main /app/
COPY config /app/config
COPY pkg /app/pkg
COPY resource /app/resource
COPY storage /app/storage
# 暴露端口
EXPOSE 8083
# 可挂载目录（配置、数据持久化）
VOLUME ["/app/config", "/app/storage", "/app/resource", "/app/pkg/yunj/resource"]
# 运行编译后的命令
CMD ["./main"]